//方法一：暴力统计
int unequalTriplets(int* nums, int numsSize) {
    int count = 0;
    for(int i = 2; i < numsSize; i++)
        for(int j = 1; j < i; j++)
            for(int k = 0; k < j; k++)
                if(nums[i] != nums[j] && nums[j] != nums[k] && nums[k] != nums[i])
                    count++;
    return count;
}

//方法二：哈希表
int unequalTriplets(int* nums, int numsSize) {
    int hash[1001], tmp = 0, count = 0;
    memset(hash, 0, 4004);

    for(int i = 0; i < numsSize; i++){
        hash[nums[i]]++;
    }

    for(int i = 0; i < 1001; i++){
        count += hash[i] * tmp * (numsSize - hash[i] - tmp);//举例：1 1 2 2 3 3 -> 下标为[0,2,4][0,3,4][0,2,5][0,3,5][1,2,4][1,3,4][1,2,5][1,3,5]的三元数对均满足，共2 * 2 * 2 = 8
        tmp += hash[i];
    }
    return count;
}

//方法三：排序（思路与方法二一样）
int cmp(const void* pa, const void* pb){
    return (*(int*)pa - *(int*)pb);
}

int unequalTriplets(int* nums, int numsSize) {
    qsort(nums, numsSize, sizeof(int), cmp);
    int ans = 0;
    for(int i = 0, j = 0; i < numsSize; i = j){
        while(j < numsSize && nums[i] == nums[j])
            j++;
        ans += i * (j - i) * (numsSize - j);
    }
    return ans;
}

/*给你一个下标从 0 开始的正整数数组 nums 。请你找出并统计满足下述条件的三元组 (i, j, k) 的数目：

0 <= i < j < k < nums.lengthnums[i]、nums[j] 和 nums[k] 两两不同。换句话说：nums[i] != nums[j]、nums[i] != nums[k] 且 nums[j] != nums[k] 。

返回满足上述条件三元组的数目。*/